home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
cstdio.arc
/
SRC.ARC
/
FILLBUF.C
< prev
next >
Wrap
C/C++ Source or Header
|
1984-07-28
|
848b
|
40 lines
/* fillbuf.c - fill file buffer.
K & R page 168.
Entered - G. R. Mansfield. 84/06/08.
Ver 1.1-4728.
*/
#include <stdio.h>
int _fillbuf(fp) /* allocate and fill input buffer */
register FILE *fp;
{
static char c, *p;
char *malloc();
int l;
if ((fp->_flag & _READ) == 0 || (fp->_flag & (_EOF | _ERR)) != 0)
return(EOF);
if (fp->_base == NULL) /* find buffer space */
if (fp->_flag & _UNBUF) /* unbuffered */
fp->_base = &c;
else if ((fp->_base = malloc(BUFSIZE, 1)) == NULL) {
wcs("no buffer space for file\n");
exit(2);
}
fp->_ptr = fp->_base;
l = fp->_flag & _UNBUF ? 1 : BUFSIZE;
fp->_cnt = read(fp->_fd, fp->_ptr, l);
if (--fp->_cnt < 0) {
if (fp->_cnt == -1)
fp->_flag |= _EOF;
else
fp->_flag |= _ERR;
fp->_cnt = 0;
return(EOF);
}
return(*fp->_ptr++);
}